home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 20
/
Cream of the Crop 20 (Terry Blount) (1996).iso
/
program
/
freeli20.zip
/
progs
/
showgy.asm
< prev
next >
Wrap
Assembly Source File
|
1996-07-01
|
5KB
|
159 lines
; SHOWGY: Display *.GY files, resolution enhanced
; *.GY are grayscale files that are 160x100 in raw
; 8-bit format. Two examples are provided.
Ideal
Jumps
Public main
Extrn startup:near
Macro lcall p,a,b,c,d,e,f,g,h ;; library call
ifnb <a>
push a ;; if args, push first arg
lcall p,b,c,d,e,f,g,h ;; and recurse . . .
else
extrn p:near ;; declare procedure
call p ;; call procedure
endif
EndM
Model Tiny
CodeSeg
P186
Org 100h
Start: jmp startup
;****************** Data Section
Syntax db 'Syntax: SHOWGY <gy-file>',13,10,0
;****************** 'main' procedure
Proc main
test cx,cx ;No arguments?
jz m_syntax
lcall fopen [di],0 ;Open the file
test ax,ax ;File not found?
jz m_syntax
xchg bp,ax ;BP = handle
lcall initgraph 0 ;Init 320x200 mode
lcall setgwin 0,0,318,198 ;Set graphics window
;-----------------------------------------------------------
; Set grayscale palette: 64 grays mapped to 256 colors
;-----------------------------------------------------------
mov dx,03C8h ;Set up for palette
xor al,al ;write operation
out dx,al
inc dx
m_pal: mov cx,12 ;4 regs at a time
m_pal2: out dx,al ;Send gray value
loop m_pal2 ;Loop back
inc ax ;Next shade
test al,40h ;Loop while < 64
jz m_pal
;-----------------------------------------------------------
; Put the defined pixels on the screen, separated by 1
;-----------------------------------------------------------
xor cx,cx ;Zero row counter
m_oloop1: xor dx,dx ;Zero column counter
m_iloop1: lcall fgetc bp ;Get byte
lcall setgcolor ax ;Set color
lcall putpix dx,cx ;Put pixel
inc dx ;Next column
inc dx
cmp dx,320 ;Loop back
jb m_iloop1
inc cx ;Next row
inc cx
cmp cx,200 ;Loop back
jb m_oloop1
;-----------------------------------------------------------
; Now, interpolate to the other 3/4 of the pixels
;-----------------------------------------------------------
xor cx,cx ;Zero row counter
m_oloop2: xor dx,dx ;Zero column counter
m_iloop2: lcall getpix dx,cx ;Get average of 2 horizontal pixels
xchg bx,ax
push bx
inc dx
inc dx
lcall getpix dx,cx
add bx,ax
shr bx,1
dec dx ;Put this pixel in the middle
lcall setgcolor bx
lcall putpix dx,cx
dec dx
pop bx ;Get average of 2 vertical pixels
inc cx
inc cx
lcall getpix dx,cx
add bx,ax
push bx
shr bx,1
dec cx ;Put this pixel in the middle
lcall setgcolor bx
lcall putpix dx,cx
dec cx
pop bx ;Restore vertical count
inc dx ;Get average of all 4 pixels
inc dx
lcall getpix dx,cx
add bx,ax
inc cx
inc cx
lcall getpix dx,cx
add bx,ax
shr bx,2
dec cx ;Put this pixel in the middle
dec dx
lcall setgcolor bx
lcall putpix dx,cx
dec cx
inc dx ;Next column
cmp dx,320 ;Loop back
jb m_iloop2
inc cx ;Next row
inc cx
cmp cx,200 ;Loop back
jb m_oloop2
xor ah,ah ;Wait for a key
int 16h
lcall closegraph ;Return to text mode
lcall fclose bp ;Close file
ret ;Return
m_syntax: push offset(Syntax) ;Print syntax message
lcall puts
ret ;Return
EndP main
End Start